package modele;

import java.util.Observable;
/**
 * Class Buffer permet le stock du contenu de l'editeur directement visible par l'IHM.
 */
public class Buffer extends Observable{
	private StringBuffer _buffer = new StringBuffer();
	private Curseur _curseur = new Curseur();

	public Buffer(Curseur curseur){
		_curseur = curseur;
	}
	
	/**
	 * Getter de la variable local _buffer (avec conversion de StringBuffer en String)
	 * @return StringBuffer Pour le contenu du buffer
	 */
	public StringBuffer getBuffer() {
		StringBuffer buf = new StringBuffer(_buffer);
		return buf;
	}

	/**
	 * Setter de la variable _buffer
	 * @param buffer
	 */
	private void updateAfficheBuffer() {
		setChanged(); // Positionne son indicateur de changement
		notifyObservers(this); // Notification
	}
	
	/**
	 * Fonction appelle suite a l'appuye sur une touche du clavier qui va modifier le _buffer et par l'observeur modifier l'IHM
	 * @param car char Represente le caractere tape.
	 */
	public void setCarac(char car){
		_buffer.insert(_curseur.getEmplacement(), car);
		updateAfficheBuffer();
	}
	
	public void setChaine(String chaine){
		_buffer.insert(_curseur.getEmplacement(), chaine);
		updateAfficheBuffer();
	}
	public void supSelect(int deb,int fin){
		_buffer.delete(deb, fin);
		updateAfficheBuffer();
	}
	public void supCar(int emp){
		if(emp<_buffer.length()) _buffer.deleteCharAt(emp);
		updateAfficheBuffer();
	}
	/**
	 * @return la taille du buffer
	 */
	public int length(){
		return _buffer.length();
	}
}
